<?php require_once(BASEPATH.'application/controllers/validaciones.php');

class notasd extends validaciones {

	function notasd(){
		parent::Controller();
		$this->load->library('rapyd');
	}
    function index() {
        
		redirect('ventas/notasd/filteredgrid');
	}
	function filteredgrid(){
		
		$this->rapyd->load('datagrid2','datafilter');

		$atts = array(
			'width'      => '800',
			'height'     => '600',
			'scrollbars' => 'yes',
			'status'     => 'yes',
			'resizable'  => 'yes',
			'screenx'    => '0',
			'screeny'    => '0'
		);

		$scli=array(
		'tabla'   =>'scli',
		'columnas'=>array(
		'cliente' =>'C&oacute;digo Cliente',
		'nombre'=>'Nombre',
		'contacto'=>'Contacto'),
		'filtro'  =>array('cliente'=>'C&oacute;digo Cliente','nombre'=>'Nombre'),
		'retornar'=>array('nombre'=>'nombre'),
		'titulo'  =>'Buscar Cliente');
		$boton=$this->datasis->modbus($scli);

		$this->rapyd->uri->keep_persistence();
        
        $filter = new DataFilter('B&uacute;squeda de Notas de Debito');
        
        $ano=date("Y");
        		
        $filter->fechad = new dateonlyField('Desde', 'fechad','d/m/Y');
		$filter->fechah = new dateonlyField('Hasta', 'fechah','d/m/Y');
		$filter->fechad->clause  =$filter->fechah->clause ='where';
		$filter->fechad->db_name =$filter->fechah->db_name='fecha';
		$filter->fechad->insertValue = date("Y-m-d", mktime(0, 0, 0, 01, 1, $ano));
        //$filter->fechad->insertValue = date("Y-m-d");
		$filter->fechah->insertValue = date('Y-m-d');
		$filter->fechah->size=$filter->fechad->size=10;
		$filter->fechad->operator='>=';
		$filter->fechah->operator='<=';

		$filter->numero = new inputField('N&uacute;mero', 'numero');
		$filter->numero->size = 10;
        		
		$filter->codigo = new inputField("Codigo Cliente", "cod_cli");
		$filter->codigo->size=10;
		
		$filter->cliente = new inputField('Nombre de Cliente', 'nombre');
		$filter->cliente->size = 25;
		        
        $filter->moneda = new dropdownField("Moneda", "moneda");
		$filter->moneda->style='width:200px;';
		$filter->moneda->option("","Todas las monedas" );
		$filter->moneda->options("SELECT codigo,descrip FROM moneda ORDER BY codigo" );
		
		$filter->buttons('reset','search');
		$filter->build("dataformfiltro");
		
		function boton($tipo=''){
			
			IF($tipo=='X'){
				return 2;
			}else{
				return 1;	
			}
		}

		$grid = new DataGrid2('','notasdc');
        $grid->db->orderby('numero','DESC');
		$grid->per_page = 10;
		$grid->use_function('boton');

	
		$uri = anchor('ventas/notasd/dataedit/show/<#id#>','<#serie#>-<#numero#>');
		
		$uri_2  = anchor_popup('formatos/ver/NOTASDC/<#id#>',img(array('src'=>'images/pdf_logo.gif','border'=>'0','alt'=>'Ver Html','height'=>'15','title'=>'Ver Html')),$atts);
		$uri_2 .= anchor_popup("formatos/verhtml/NOTASDC/<#id#>",img(array('src'=>'images/html_icon.gif','border'=>'0','alt'=>'Ver Pdf','height'=>'15','title'=>'Ver Pdf')),$atts);
		$uri_2 .= img(array('src'=>'images/<boton><#tipo_doc#></boton>.gif','border'=>'0','alt'=>'Estado','height'=>'12','title'=>'Estado'));
		
		$uri3 = anchor_popup('ventas/spre/factura/show/<#id#>','Negociación',$atts);
					
		$grid->column('Acci&oacute;n',$uri_2,"align='center'");
		
		$grid->column_orderby('N&uacute;mero' ,$uri                                            ,'numero' );
		$grid->column_orderby('Fecha'         ,'<dbdate_to_human><#fecha#></dbdate_to_human>'  ,'fecha'  );
		$grid->column_orderby('Codigo'        ,'cod_cli'                                       ,'cod_cli' );
		$grid->column_orderby('Nombre'        ,'nombre'                                        ,'nombre'  );
		$grid->column_orderby('Sub.Total'     ,'<nformat><#totals#></nformat>'                 ,'totals'  );
		$grid->column_orderby('Impuesto'      ,'<nformat><#iva#></nformat>'                    ,'iva'     );
		$grid->column_orderby('Total'         ,'<nformat><#totalg#></nformat>'                 ,'totalg'  );
		$grid->column_orderby('Vendedor'      ,'vd','vd'                                       ,"align='center'");
		$grid->column("Moneda"              ,"moneda","moneda"  ,"align='center'");
	
		$grid->add("ventas/notasd/dataedit/create",'Nueva Nota de Debito');
				
		$grid->totalizar('totals','iva','totalg');
        
		$grid->output;
		$grid->build('datagridST');
		//echo $grid->db->last_query();
		
		$style ='
		<style type="text/css">
		.fakeContainer { /* The parent container */
		    margin: 5px;
		    padding: 0px;
		    border: none;
		    width: 1200px; /* Required to set */
		    height: 350px; /* Required to set */
		    overflow: hidden; /* Required to set */
		}
		</style>	
		';
			

		$data["script"]  = script("jquery.js");
		$data["script"] .= script('superTables.js');
		$data['style']   = $style;
		$data['style']  .= style('superTables.css');

		$data['filtro']  = $filter->output;
		$data['content'] = $grid->output;
		
		$data['head']    = $this->rapyd->get_head();
		$data['title']   = heading('Notas de Debito a Clientes');
		$this->load->view('view_ventanas', $data);
	}
       
	function dataedit(){
		
		$this->rapyd->load('dataobject','datadetails');
		
		$mSCLId=array(
		'tabla'   =>'scli',
		'columnas'=>array(
		'cliente' =>'Cliente',
		'nombre'=>'Nombre', 
		'rifci'=>'Ruc',
		'dire11'=>'Direcci&oacute;n'),
		'filtro'  =>array('nombre'=>'Nombre'),
		'retornar'=>array('cliente'=>'cod_cli','nombre'=>'nombre','rifci'=>'rifci',
		'dire11'=>'direc'),
		'titulo'  =>'Buscar Cliente',
		'script'  => array('post_modbus_scli()'));
		$boton =$this->datasis->modbus($mSCLId);
		
		$modbus=array(
			'tabla'   =>'cpla',
			'columnas'=>array(
				'cuenta'  =>'Cuenta',
				'descrip' =>'Descripci&oacute;n',
				'ajuste'  => 'Llevar Ajuste',
				'contrapartida'  => 'Contrapartida',
				'clase'  => 'Clase',
				'costo'  => 'Costo',
				'tercero'  => 'Tercero',
				'extranjeria'  => 'Extranjeria'
				),
			'filtro'  =>array('cuenta'  =>'Cuenta','descrip'=>'Descripci&oacute;n'),
			'retornar'=>array(
				'cuenta' =>'cuenta_<#i#>',
				'descrip'=>'descrip_<#i#>',
				),
			'p_uri'   => array(4=>'<#i#>'),
			'titulo'  => 'Buscar Cuenta'
		);
		$btn=$this->datasis->p_modbus($modbus,'<#i#>');
		
		$mSFAC=array(
			'tabla'   =>'sfac',
			'columnas'=>array(
					'serie'=>'Serie',
					'numero'=>'Numero',
					'totalg' =>'Total',
	                'rifci'=>'RIF',		
                   'nombre'=>'Nombre',
                   'fecha' =>'Fecha',
                   'moneda' =>'Moneda'),
			'filtro'  =>array('rif'=>'RUC','nombre'=>'Nombre','numero'=>'Numero'),
			'retornar'=>array(
                'serie'=>'serief',
                'numero'=>'factura',
                'fecha'=>'fechaf'),
                'p_uri'   => array(4=>'<#i#>'),
                'titulo'  => 'Buscar Facturas');
              
		$btn_sfac=$this->datasis->p_modbus($mSFAC);
		
		$mLETRA=array(
			'tabla'   =>'itpagos',
			'columnas'=>array(
					'serie'=>'Serie',
					'control'=>'Numero',
					'cod_cli' =>'Cliente',
                   'fecha' =>'Fecha',
                   'moneda' =>'Moneda'),
			'filtro'  =>array('numero'=>'Numero','cod_cli'=>'Cliente'),
			'retornar'=>array(
                'serie'=>'serief',
                'control'=>'factura',
                'fecha'=>'fechaf'),
                'p_uri'   => array(4=>'<#i#>'),
                'titulo'  => 'Buscar Letras');
              
		$btn_letra=$this->datasis->p_modbus($mLETRA);
		
		$script ='
		<script type="text/javascript" >
		
		function add_confirmation(transac) {
			idf = transac;
			var answer = confirm("¿Desea Anular Nota de Debito?")
			if (answer){
				alert("Nota de Debito")
				window.location = "../../anular/"+idf;
			}
			else{
				alert("La Nota de Debito no se anulo")
			}

		}

		</script>
		';
						
		$do = new DataObject('notasdc');
		$do->rel_one_to_many('itnotasdc', 'itnotasdc', 'id');
		$do->pointer('scli' ,'scli.cliente=notasdc.cod_cli','scli.tipo AS sclitipo','left');
		
		$edit = new DataDetails(' ', $do);	
		$edit->set_rel_title('itnotasdc','Producto <#o#>');
		
		$edit->back_url = site_url("ventas/notasd/filteredgrid");
		
		$edit->pre_process('insert' ,'_pre_insert');
		//$edit->pre_process('update' ,'_pre_update');
		//$edit->post_process('update','_post_insert');
		$edit->post_process('insert','_post_insert');
		
		$edit->id = new hiddenField(" ", 'id');
		$edit->transac = new hiddenField(" ", 'transac');
		
		$edit->tipo_doc = new  dropdownField ('Tipo','tipo_doc');
		$edit->tipo_doc->option("ND",'Nota Emitida');
        $edit->tipo_doc->option("X",'Nota Eliminada');
        $edit->tipo_doc->when=array('show');
        
		$edit->fecha = new DateonlyField('Fecha', 'fecha','Y-m-d');
		$edit->fecha->insertValue = date('Y-m-d');
		$edit->fecha->rule = 'required';
		$edit->fecha->size = 12;
		$edit->fecha->rule= "callback_cambio";
                
        $edit->vence = new DateonlyField('Vence', 'vence','Y-m-d');
		$edit->vence->rule = 'required';
        //$edit->vence->when=array('show');
		$edit->vence->size = 12;

		$edit->vd = new  dropdownField ('Vendedor', 'vd');
		$edit->vd->options('SELECT vendedor, CONCAT(vendedor,\' \',nombre) nombre FROM vend ORDER BY vendedor');
		$edit->vd->style='width:180px;';
		
		$edit->serie = new dropdownField("N&uacute;mero", "serie");
		$edit->serie->option("001","001-NOTA DE DEBITO");
		$edit->serie->rule= "required";
        $edit->serie->style='width:180px;';
        
        $edit->numero = new inputField('N&uacute;mero', 'numero');
		$edit->numero->size = 12;
		$edit->numero->maxlength=11;
		$edit->numero->rule= "callback_chexiste";
        
        $edit->compro = new  dropdownField ('Documento Afectado', 'compro');
        $edit->compro->option("L","LETRA");
		$edit->compro->option('F',"FACTURA");
		$edit->compro->style='width:180px;'; 
		$edit->compro->append(' Fact. '.$btn_sfac.' Letra'.$btn_letra);
        
        $edit->serief = new inputField('Numero', 'serief');
		$edit->serief->size = 3;
		$edit->serief->maxlength=3;
		//$edit->serief->readonly  =true;
		        				
		$edit->numerof = new inputField('Numero', 'factura');
		$edit->numerof->size = 12;
		//$edit->numerof->readonly  =true;
		$edit->numerof->maxlength=11;
		$edit->numerof->in="serief";
				
		$edit->fechaf = new DateonlyField('Fecha', 'fechaf','Y-m-d');
		$edit->fechaf->insertValue = date('Y-m-d');
		//$edit->fechaf->readonly  =true;
		$edit->fechaf->size = 12;
        		     
        $edit->ccosto = new  dropdownField ('Centro de Costo', 'ccosto');
        $edit->ccosto->option("0001","Administraci&oacute;n");
		$edit->ccosto->option('0002',"Operaciones");
		$edit->ccosto->option('0003','Importaci&oacute;n'); 
		$edit->ccosto->style='width:180px;'; 
		$edit->ccosto->when=array('show'); 
		
		$edit->formap = new dropdownField("Forma de pago", "formap");
		$edit->formap->option("","Seleccione la forma de pago" );
		$edit->formap->options("SELECT codigo, CONCAT_WS('-',codigo,descrip) AS descrip FROM seriefp WHERE compro='F' ORDER BY codigo");
		$edit->formap->rule= "required";
        $edit->formap->style='width:180px;';
        $edit->formap->when=array('show');
        
        $edit->cuentai = new inputField('Cuenta', 'cuentai');
		$edit->cuentai->size     = 12;
		$edit->cuentai->rule     = 'required';
		$edit->cuentai->readonly  =true;
		$edit->cuentai->db_name='cuenta';
		$edit->cuentai->when=array('show');

		$edit->cliente = new inputField('Codigo','cod_cli');
		$edit->cliente->size = 6;
		$edit->cliente->maxlength=5;
		$edit->cliente->append($boton);
		$edit->cliente->readonly  = true;
		//$edit->cliente->insertValue =$cliente;
				
		$edit->nombre = new inputField('Nombre', 'nombre');
		$edit->nombre->size = 35;
		$edit->nombre->maxlength=40;
		$edit->nombre->autocomplete=false;
		$edit->nombre->rule= 'required';
		$edit->nombre->readonly  = true;
		//$edit->nombre->insertValue =$nombre;
		
		$rifci=$this->datasis->traevalor('TIPO');

		$edit->rifci   = new inputField("$rifci",'rifci');
		$edit->rifci->autocomplete=false;
		$edit->rifci->size = 15;
		$edit->rifci->readonly  = true;
		//$edit->rifci->insertValue =$crifci;

		$edit->direc = new inputField('Direcci&oacute;n','direc');
		$edit->direc->size = 55;
		$edit->direc->readonly  = true;
		
		$edit->moneda = new dropdownField("Moneda", "moneda");
		$edit->moneda->style='width:180px;';
		$edit->moneda->option("","Seleccione la moneda" );
		$edit->moneda->options("SELECT codigo,descrip FROM moneda ORDER BY codigo");
		$edit->moneda->rule = 'required';
		$edit->moneda->group = "Precios";
		
		$edit->cambio = new inputField('Cambio', 'cambio');
		$edit->cambio->css_class ='inputnum';
		$edit->cambio->size      = 12;
        $edit->cambio->when=array('show');
        
		//**************************
		//  Campos para el detalle
		//**************************
        
		$edit->cuenta = new inputField('C&oacute;digo <#o#>', 'cuenta_<#i#>');
		$edit->cuenta->size     = 12;
		$edit->cuenta->db_name  = 'cuenta';
		$edit->cuenta->rel_id   = 'itnotasdc';
		$edit->cuenta->rule     = 'required';
        $edit->cuenta->mode = 'autohide';
		$edit->cuenta->size    = 15;
		$edit->cuenta->append($btn);

		$edit->descrip = new inputField('Descripci&oacute;n <#o#>', 'descrip_<#i#>');
		$edit->descrip->size=40;
		$edit->descrip->db_name='descrip';
		$edit->descrip->maxlength=40;
		//$edit->descrip->readonly  = true;
		$edit->descrip->rel_id='itnotasdc';
        $edit->descrip->mode = 'autohide';
        $edit->descrip->rule = 'strtoupper';
		//$edit->descrip->style    = 'width:100%';
		$edit->descrip->size    = 50;


		$edit->total = new inputField('Importe <#o#>', 'total_<#i#>');
		$edit->total->db_name='total';
		$edit->total->size=10;
        $edit->total->mode = 'autohide';
		$edit->total->css_class='inputnum';
		$edit->total->rel_id   ='itnotasdc';
		$edit->total->onkeyup  ='totalizar()';
		//$edit->total->style    = 'width:90%';
		$edit->total->size    = 15;

		$edit->ivat = new inputField('Impuesto', 'iva');
		$edit->ivat->css_class ='inputnum';
		$edit->ivat->readonly  =true;
		$edit->ivat->size      = 10;
		
		$edit->totals = new inputField('Sub-Total', 'totals');
		$edit->totals->css_class ='inputnum';
		$edit->totals->readonly  =true;
		$edit->totals->size      = 10;

		$edit->totalg = new inputField('Monto Total', 'totalg');
		$edit->totalg->css_class ='inputnum';
		$edit->totalg->readonly  =true;
		$edit->totalg->size      = 10;
		
		$edit->condi1 = new inputField('Observaci&oacute;n', 'condi1');
		$edit->condi1->size =60;
		$edit->condi1->maxlength=70;
		$edit->condi1->rule = 'strtoupper';

		$edit->usuario = new autoUpdateField('usuario',$this->session->userdata('usuario'),$this->session->userdata('usuario'));
			
		$numero  =$edit->_dataobject->get("numero");
        $serie   =$edit->_dataobject->get("serie");
        $transac =$edit->_dataobject->get("transac");
        
        $chek=$this->datasis->dameval("SELECT abono FROM itpagos WHERE transac='$transac'");

		if($chek==0){

			$edit->button_status('btn_cargar','Anular Nota de Debito',"javascript:add_confirmation('$transac')",'TR','show');
		}
		
		$conten['form']  =&  $edit;
		
		$edit->buttons('save','add_rel','back','undo');
		$edit->build();
		              
		$data['title']   = heading('Nota de Debito No.'.$serie.'-'.$numero);
		$data['content'] = $this->load->view('view_itnotadc', $conten,true);
		$data['style']   = style('redmond/jquery-ui-1.8.1.custom.css');
		$data['style']  .= style('jquery.autocomplete.css');

		$data['script']  = script('jquery.js');
		$data['script'] .= script('jquery-ui.js');
		$data['script'] .= script('plugins/jquery.numeric.pack.js');
		$data['script'] .= script('plugins/jquery.floatnumber.js');
		$data['script'] .= script('plugins/jquery.autocomplete.js');
		$data['script'] .= script('nformat.js');
		$data['script'] .= $script;	

		$data['head']    = $this->rapyd->get_head();
		$this->load->view('view_ventanas', $data);
		
	}
	 function anular($transac){
		 
		$id=$this->datasis->dameval("SELECT id FROM notasdc where transac='$transac' ");
		$numero=$this->datasis->dameval("SELECT numero FROM notasdc where transac='$transac' ");
		
		$this->db->query("DELETE FROM smov    WHERE transac='$transac'");
        $this->db->query("DELETE FROM itpagos WHERE serie='001' and numero='$numero' AND compro='ND'");
		
		$this->db->query("UPDATE notasdc SET tipo_doc='X' WHERE transac='$transac'");
		
		logusu('notasdc',"NOTA DE DEBITO  $numero ELIMINADA");
        
        redirect("ventas/notasd/dataedit/show/$id");
		//echo 'hola'.$id;
	}
	function chexiste($codigo){
		
		$numero=$this->input->post('numero');
		$numero =str_pad($numero, 11, "0", STR_PAD_LEFT);
		
		$chek=$this->datasis->dameval("SELECT COUNT(*) FROM notasdc WHERE numero='$numero'");
		if ($chek > 0){
			$this->validation->set_message('chexiste',"El numero de nota de debito $numero ya se encuetra registrada");
			return FALSE;
		}else {
		 return TRUE;
		}
	}
	function _pre_update($do){
				
		$igv=$this->datasis->traevalor('IGV');
        
        $iva=$totals=$totalg=0;
        
		$cana=$do->count_rel('itnotasdc');
		
		for($i=0;$i<$cana;$i++){
			
			$itimporte   = $do->get_rel('itnotasdc','total',$i);
			$totals  += $itimporte;
						
		}
		
		$iva     = ($totals*$igv/100);	

		$do->set('totals' ,round($totals ,2));
		$do->set('iva'    ,round($iva    ,2));
		$do->set('totalg' ,round($totals+$iva ,2));
		
	}
	function _pre_insert($do){
		
		$fecha =$do->get('fecha');
		$numero=$do->get('numero');
		$moneda=$do->get('moneda');        
		$serie =$do->get('serie'); 
         
        if($moneda=='01'){
			$formap='051';
		
		}else{
			$formap='052';
		}
        
        //actualiza al cambio segun fecha
        $cambio=$this->datasis->dameval("SELECT cambio FROM cambio WHERE fecha='$fecha'");
        $cuenta=$this->datasis->dameval("SELECT cuenta FROM seriefp WHERE codigo='$formap'");
        $numero =str_pad($numero, 11, "0", STR_PAD_LEFT); 
        $ntransa=$this->datasis->fprox_numero('ntransa');
        
        $do->set('cambio',$cambio);
        $do->set('cuenta',$cuenta);
        $do->set('formap',$formap);
        $do->set('numero',$numero); 
        $do->set('transac',$ntransa);
        $do->set('tipo_doc','ND');
        $do->set('ccosto','0001');
        
        $igv=$this->datasis->traevalor('IGV');
        
        $iva=$totals=$totalg=0;
        
		$cana=$do->count_rel('itnotasdc');
		
		for($i=0;$i<$cana;$i++){
			
			$do->set_rel('itnotasdc','serie'  ,$serie,$i);
			$do->set_rel('itnotasdc','numero' ,$numero,$i);
			
			$itimporte   = $do->get_rel('itnotasdc','total',$i);
			$totals  += $itimporte;
						
		}
		
		$iva     = ($totals*$igv/100);	

		$do->set('totals' ,round($totals ,2));
		$do->set('iva'    ,round($iva    ,2));
		$do->set('totalg' ,round($totals+$iva ,2));

		return true;
            	
	}
	function _post_insert($do){
		
		$serie=$do->get('serie');
		$numero=$do->get('numero');
        $cod_cli=$do->get('cod_cli');
        $nombre=$do->get('nombre');
        $monto=$do->get('totalg');
        $iva=$do->get('iva');
        $fecha=$do->get('fecha');
        $vence=$do->get('vence');
        $moneda=$do->get('moneda');
        $cuenta=$do->get('cuenta');
        $transac=$do->get('transac');
        $cambio=$do->get('cambio');
        $condi1=$do->get('condi1');
        $id=$do->get('id');
        
        		
		//$this->db->query("DELETE FROM smov    WHERE transac='$transac'");
		//$this->db->query("DELETE FROM itpagos WHERE transac='$transac'");
        
        
        $usuario=$this->session->userdata['usuario'];
        
                                          		
		$mSQL_3=$this->db->query("INSERT INTO smov (moneda,tipo_doc,serie,numero,fecha,vence,cod_cli,  nombre, monto , impuesto, usuario,transac)
                                            VALUES('$moneda','ND','$serie','$numero','$fecha','$vence','$cod_cli','$nombre','$monto','$iva','$usuario','$transac')");   
		
		
		$mSQL_4=$this->db->query("INSERT INTO itpagos(cuenta,cambio,compro,serie,numero,ncuota,cod_cli,monto,vence,fecha,dias,observa,tipo,usuario,transac,moneda)
                                                VALUES('$cuenta','$cambio','ND','$serie','$numero','$numero','$cod_cli','$monto','$vence','$fecha','0','$condi1','ND','$usuario','$transac','$moneda')");
       
	
		logusu('notasdc',"NOTA DE DEBITO al cliente $cod_cli numero $numero CREADO");
		
	}

	     
}
